import {defineStore} from "pinia";
import type {CategoryListType} from "@/api/category";
import {reqGetCategory1ListAsync, reqGetCategory2ListAsync, reqGetCategory3ListAsync} from "@/api/category";

// category里面的每一个列表数据的整体限制
type categoryStoreInfo = {
    categoryList1: CategoryListType,   // 一级列表数据
    categoryList2: CategoryListType,   // 二级列表数据
    categoryList3: CategoryListType,   // 三级列表数据
    categoryList1Id: null | number,    // 一级列表数据的查询Id
    categoryList2Id: null | number,    // 二级列表数据的查询Id
    categoryList3Id: null | number,    // 三级列表数据的查询Id
}

const useCategoryStore = defineStore('category', {
    state: (): categoryStoreInfo => {
        return {
            categoryList1: [],   // 一级列表数据
            categoryList2: [],   // 二级列表数据
            categoryList3: [],   // 三级列表数据

            // 这里保存 Id 是因为 三级列表是渐进式的 我们根据id 来判断 他是否有资格下一步
            categoryList1Id: null,   // 一级列表数据的查询Id
            categoryList2Id: null,   // 二级列表数据的查询Id
            categoryList3Id: null,   // 三级列表数据的查询Id
        }
    },
    actions: {
        // 获取一级列表数据
        async getCategoryList1() {
            try {
                const result = await reqGetCategory1ListAsync();
                this.categoryList1 = result
            } catch (e) {
                return Promise.reject(e)
            }
        },
        // 获取二级列表数据
        async getCategoryList2(categoryList1Id: number) {
            try {
                const result = await reqGetCategory2ListAsync(categoryList1Id);
                this.categoryList2 = result
            } catch (e) {
                return Promise.reject(e)
            }
        },
        // 获取三级列表数据
        async getCategoryList3(categoryList2Id: number) {
            try {
                const result = await reqGetCategory3ListAsync(categoryList2Id);
                this.categoryList3 = result
            } catch (e) {
                return Promise.reject(e)
            }
        }
    }
})
export default useCategoryStore